home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / program / swagd_f.zip / DOS.SWG / 0078_Reading The DOS Environment.pas < prev    next >
Pascal/Delphi Source File  |  1995-03-03  |  2KB  |  87 lines

  1. {
  2. >> How do I detect / read a string in the enviornment?  For example
  3. > WriteLn('The DOS variable "COMSPEC" = ",GetEnv('COMSPEC'));
  4.  
  5. If you are using an older version of pascal without the getenv function, then
  6. here are two functions to get the environment string and executed program name
  7. that I wrote a while ago. It can examime any environment, not just the current
  8. program... you just provide the prefix segment...
  9. }
  10.  
  11. {--get the text of an environment string variable--}
  12. function getenvstr(_prefixseg: word; v : string): string;
  13. { gary a. mays 3/1/88 }
  14.   type
  15.     envstr = array[1..32768] of char;
  16.   var
  17.     env    : ^envstr;
  18.     p    : integer;
  19.     temp : string;
  20.     i : integer;
  21. begin
  22.   if v = '' then
  23.   begin
  24.     getenvstr := '';
  25.     exit;
  26.   end;
  27.  
  28.   { convert specified variable name to uppercase }
  29.   for i := 1 to length(v) do v[i] := upcase(v[i]);
  30.  
  31.   env := ptr(memw[_prefixseg:$2c],0);
  32.   i := 1;
  33.   temp := '';
  34.  
  35.   while env^[i] <> #0 do
  36.   begin
  37.     temp := temp + env^[i];
  38.     i := succ(i);
  39.     if env^[i] = #0 then { end of current string }
  40.     begin
  41.       i := succ(i);
  42.       p := pos('=',temp) + 1;
  43.       if p > 1 then
  44.         if v = copy(temp,1,p-2) then { caller's variable name matched }
  45.         begin
  46.           getenvstr := copy(temp,p,255); { return variable's value }
  47.           exit;
  48.         end;
  49.       temp := '';
  50.     end;
  51.   end;
  52.   getenvstr := '';
  53. end; { getenvstr }
  54.  
  55. {--get the executed program name--}
  56. function getprogramname(_prefixseg: word): string;
  57. { gary a. mays 5/11/88 }
  58.   type
  59.     envstr = array[1..32768] of char;
  60.   var
  61.     env    : ^envstr;
  62.     p      : integer;
  63.     temp   : string;
  64.     i : integer;
  65. begin
  66.   env := ptr(memw[_prefixseg:$2c],0);
  67.   i := 1;
  68.   temp := '';
  69.  
  70.   while env^[i] <> #0 do
  71.   begin
  72.     repeat i := succ(i); until env^[i] = #0; {locate end of a string}
  73.     i := succ(i); { point to next string or final nul }
  74.   end;
  75.  
  76.   i := i + 3; { point to start of asciz string }
  77.  
  78.   while env^[i] <> #0 do
  79.   begin
  80.     temp := temp + env^[i];
  81.     i := succ(i);
  82.   end;
  83.  
  84.   getprogramname := temp;
  85. end; { getprogramname }
  86.  
  87.